package com.loong.android.tools;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式
 */
public class RegExp {

    private Matcher mMatcher;

    /**
     * 返回操作的java.util.regex.Matcher对象
     */
    public Matcher getMatcher() {
        return mMatcher;
    }

    /**
     * 创建正则表达式
     *
     * @param content 待搜索的内容
     * @param regExp 正则表达式
     * @param ignoreCase 是否忽略大小写
     * @param multiLine 是否启用多行模式
     */
    public RegExp build(String content, String regExp, boolean ignoreCase, boolean multiLine) {
        int flag = ignoreCase ? Pattern.CASE_INSENSITIVE : 0;
        flag = flag | (multiLine ? Pattern.MULTILINE : 0);
        mMatcher = Pattern.compile(regExp, flag).matcher(content);
        return this;
    }

    /**
     * 创建正则表达式
     *
     * @param content 待搜索的内容
     * @param regExp 正则表达式
     * @param ignoreCase 是否忽略大小写
     */
    public RegExp build(String content, String regExp, boolean ignoreCase) {
        build(content, regExp, ignoreCase, false);
        return this;
    }

    /**
     * 创建正则表达式
     *
     * @param content 待搜索的内容
     * @param regExp 正则表达式
     */
    public RegExp build(String content, String regExp) {
        build(content, regExp, false, false);
        return this;
    }

    /**
     * 匹配下一个
     *
     * @return 返回是否查找到下一个匹配项
     */
    public boolean find() {
        return mMatcher.find();
    }

    /**
     * 从指定位置开始匹配下一个
     *
     * @return 返回是否查找到下一个匹配项
     */
    public boolean find(int start) {
        return mMatcher.find(start);
    }

    /**
     * 替换全部匹配项
     *
     * @param replacement 替换内容
     */
    public String replaceAll(String replacement) {
        return mMatcher.replaceAll(replacement);
    }

    /**
     * 替换首个匹配项
     *
     * @param replacement 替换内容
     */
    public String replaceFirst(String replacement) {
        return mMatcher.replaceFirst(replacement);
    }

    /**
     * 取当前匹配项的内容
     */
    public String group() {
        return mMatcher.group();
    }

    /**
     * 取当前匹配项在待搜索文本中的起始位置
     */
    public int start() {
        return mMatcher.start();
    }

    /**
     * 取当前匹配项在待搜索文本中的结束位置
     */
    public int end() {
        return mMatcher.end();
    }

    /**
     * 当前匹配项的子匹配数量
     */
    public int groupCount() {
        return mMatcher.groupCount();
    }

    /**
     * 取子匹配文本
     *
     * @param index 子匹配索引，从1开始
     */
    public String group(int index) {
        return mMatcher.group(index);
    }

    /**
     * 取子匹配的开始位置
     *
     * @param index 子匹配索引
     */
    public int start(int index) {
        return mMatcher.start(index);
    }

    /**
     * 取子匹配的结束位置
     *
     * @param index 子匹配索引
     */
    public int end(int index) {
        return mMatcher.end(index);
    }

    /**
     * 使用重置匹配位置到最初状态
     */
    public void reset() {
        mMatcher.reset();
    }

    /**
     * 是否匹配整个待匹配内容
     */
    public boolean matches() {
        return mMatcher.matches();
    }

    /**
     * 是否匹配待匹配内容的开头部分
     */
    public boolean lookingAt() {
        return mMatcher.lookingAt();
    }
}
